﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CarBlackBox
{
    public partial class CommunicationFrame
    {
        public static object[] ResolveFrame(CommunicationCommand command,byte[] RxList)
        {
            object[] ret=null;
            ushort h, l;
            uint km;
            DateTime dt;
            try
            {
                switch (command)
                {
                    case CommunicationCommand.采集记录仪的实时时钟:
                        ret = new object[1];
                        ret[0] = new DateTime(2000 + (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 1]), 
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 2]), 
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 3]), 
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 4]), 
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 5]));
                        break;
                    case CommunicationCommand.采集记录仪中的车辆特征系数:
                        h = WFNetLib.BytesOP.MakeShort(0x00, RxList[数据位置]);
                        l = WFNetLib.BytesOP.MakeShort(RxList[数据位置+1], RxList[数据位置+2]);
                        ret = new object[1];
                        ret[0] = WFNetLib.BytesOP.MakeInt(h, l);
                        break;
                    case CommunicationCommand.采集车辆VIN号_车牌号码_车牌分类:
                        string vin;
                        string license;
                        string cartype;
                        vin = WFNetLib.Strings.StringsFunction.getString_gb2312(RxList, 数据位置, 17);
                        license = WFNetLib.Strings.StringsFunction.getString_gb2312(RxList, 数据位置 + 17, 12);
                        cartype = WFNetLib.Strings.StringsFunction.getString_gb2312(RxList, 数据位置 + 29, 12);
                        ret = new object[1];
                        ret[0] = "车辆VIN号：" + vin + "\r\n" + "车辆号码：" + license + "\r\n" + "车牌分类：" + cartype;
                        break;
                    case CommunicationCommand.采集驾驶员代码及对应的机动性车驾驶证号码:
                        string din= WFNetLib.Strings.StringsFunction.getString_gb2312(RxList, 数据位置+3, 18);
                        h = WFNetLib.BytesOP.MakeShort(0x00, RxList[数据位置]);
                        l = WFNetLib.BytesOP.MakeShort(RxList[数据位置 + 1], RxList[数据位置 + 2]);
                        uint driverid = WFNetLib.BytesOP.MakeInt(h, l);
                        ret = new object[1];
                        ret[0] = "驾驶员代码：" + driverid.ToString() + "\r\n" + "机动车驾驶证号码:" + din + "\r\n";
                        break;
                    case CommunicationCommand.采集最近360H内的累计行驶里程数据:
                        km=WFNetLib.BytesOP.BCD2int(RxList,"999999");                        
                        dt = new DateTime(2000 + (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 1 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 2 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 3 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 4 + 3]),
                                                    0);
                        ret = new object[1];
                        ret[0] = dt.ToString() + ":   " + km.ToString() + " Km";
                        break;
                    case CommunicationCommand.采集最近2个日历天内的累计行驶里程:
                        km = WFNetLib.BytesOP.BCD2int(RxList, "999999");
                        dt = new DateTime(2000 + (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 1 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 2 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 3 + 3]),
                                                    (int)WFNetLib.BytesOP.BCD2Byte(RxList[数据位置 + 4 + 3]),
                                                    0);
                        ret = new object[1];
                        ret[0] = dt.ToString() + ":   " + km.ToString() + " Km";
                        break;
                    default:
                        ret = new object[1];
                        ret[0] = "OK";
                        MessageBox.Show("设置成功");
                        return ret;
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("获得的记录仪应答不符合要求:" + ex.Message);
            }
            return ret;
        }
    }
}
